package controller

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
	"todo/models"
)

var err error

func CreateTodo(c *gin.Context) {
	// 前端添加待办事项，点击提交，请求会到这里
	//	构造数据对象
	var todo models.Todo
	err = c.BindJSON(&todo) // 将请求的json数据反序列化为结构体对象
	if err != nil {
		fmt.Println("bind json err:", err.Error())
		return
	}
	//fmt.Println(todo)
	//插入数据库
	err = models.CreateTodo(&todo)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{"error": err.Error()})
	} else {
		// 返回响应
		c.JSON(http.StatusOK, todo)
	}
}

func DeleteTodo(c *gin.Context) {
	// 获取查询的id
	id, ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
		return
	}
	if err = models.DeleteTodo(id); err != nil {
		c.JSON(http.StatusOK, gin.H{"status": "删除失败！"})
	} else {
		c.JSON(http.StatusOK, gin.H{"status": "删除成功!"})
	}
	//fmt.Println("======>id:", id)
	//c.JSON(http.StatusOK, gin.H{"id": id})
}

func UpdateTodo(c *gin.Context) {
	// 获取id
	id, ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{"error": "要修改的id不存在！"})
	}
	// 查找并绑定todo数据
	todo, err := models.GetTodo(id)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{"error": err.Error()})
		return
	}
	if err = c.BindJSON(&todo); err != nil {
		c.JSON(http.StatusOK, gin.H{"error": err.Error()})
		return
	}
	//fmt.Println(todo, id) // {0 true} 2
	// 保存到数据库
	if err = models.UpdateTodo(todo); err != nil {
		c.JSON(http.StatusOK, gin.H{"error": err.Error()})
		return
	} else {
		c.JSON(http.StatusOK, todo)
	}
}

func GetTodoList(c *gin.Context) {
	// 查询所有任务
	todoList, err := models.GetTodoList()
	//fmt.Println(todoList)
	if err != nil {
		//	返回数据和响应
		c.JSON(http.StatusOK, gin.H{"error": err.Error()})
	} else {
		c.JSON(http.StatusOK, todoList)
	}
}
